package fr.sorbonne.inf5.yams.model;

import fr.sorbonne.inf5.yams.exceptions.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author Oukherfellah Riad
 * @author Dubos Romain
 */
public class BDD {

    private static Connection co = null;
    private static String driver;
    private static String bdd;
    private static String login;
    private static String pass;

    /**
     * Retourne une connexion à la base de données, développé en sigleton
     * @return la connexion à la BD
     * @throws ConnectionBugException
     */
    public static Connection connexion() throws ConnectionBugException {
        if (co == null) {
            driver = "org.apache.derby.jdbc.ClientDriver";
            bdd = "jdbc:derby://localhost:1527/palmaresYam";
            login = "palmares";
            pass = "palmares";
            try {
                loadDriver();
            } catch (DriverBugException ex) {
                throw new ConnectionBugException();
            }
            try {
                co = DriverManager.getConnection(bdd, login, pass);
            } catch (Exception e) {
                throw new ConnectionBugException();
            }
        }
        return co;
    }

    /**
     * Charge le driver de l'attribut
     * @throws DriverBugException sio le driver n'est pas accessible
     */
    private static void loadDriver() throws DriverBugException {
        try {
            Class.forName(driver);
        } catch (Exception e) {
            throw new DriverBugException();
        }
    }

    /**
     * Effectue la déconnexion de la BD
     * @throws DeconnectionBugException Si un problème survient lors de la déconnexion
     */
    public static void deconnexion() throws DeconnectionBugException {
        try {
            if (co != null && !(co.isClosed())) {
                co.close();
                co=null;
            }
        } catch (SQLException e) {
            throw new DeconnectionBugException();
        }
    }

    @Override
    /**
     * Déconnecte la connexion lors de la fin de l'objet
     */
    public void finalize() throws DeconnectionBugException {
        BDD.deconnexion();

    }
}
